package com.prik.factory.abs.store;

import com.prik.factory.abs.pizza.Pizza;

/**
 * 披萨店超类
 **/
public abstract class PizzaStore {

    public Pizza orderPizza(String type) {

        // 把创建披萨方法从简单工厂拿回来
        Pizza pizza = createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        System.out.println(pizza.getName() + "制作完成");

        return pizza;
    }

    /**
     * 将实例化披萨的责任移到抽象方法中，这个方法就等同于一个工厂
     * 子类通过这个方法来执行对象实例化逻辑，达到超类和子类解耦的目的
     */
    abstract Pizza createPizza(String type);

}